package com.sky.controller;

import com.alibaba.fastjson.JSON;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @projectName: netty-cloud
 * @package: com.sky.controller
 * @className: ApiController
 * @author: zhl
 * @description: TODO
 * @date: 2024/4/28 15:31
 * @version: 1.0
 */
@RestController
public class ApiController {

    /**
     * 通过GET请求获取当前会话的认证信息。
     *
     * 本方法旨在提供一种方式，来获取当前SecurityContext中存储的认证信息的JSON格式表示。
     * 主要用于在前端页面上展示或使用这些信息，例如显示当前用户的登录状态。
     *
     * @return 当前认证信息的JSON字符串。这可能包括用户名、令牌等，具体取决于认证方式和配置。
     */
    @GetMapping("/getSession")
    public String getSession(){
        // 从SecurityContextHolder中获取当前的SecurityContext
        SecurityContext securityContext = SecurityContextHolder.getContext();
        // 从SecurityContext中获取当前的Authentication对象
        Authentication authentication = securityContext.getAuthentication();
        // 获取认证信息中的凭证对象，这可能是密码、令牌等
        Object credentials = authentication.getCredentials();
        // 将凭证对象转换为JSON字符串返回
        return JSON.toJSONString(credentials);
    }

}
